13. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6nDqSBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gTmF2aWdhdGV1cnMgw6AgcHJpdmlsw6lnaWVyOiBDaHJvbWUsIE9wZXJhLCBFZGdlLiBGaXJlZm94IHBldXQgcG9zZXIgcHJvYmzDqG1lIChuZSBmb25jdGlvbm5lIHBhcyBkYW5zIElFKS4gIA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGV1eCB2dWVzIGRlcyBkb25uw6llczogYGxpZ25lc2AgZXQgYGVudHLDqWVzLmAgTGVzIGRvbm7DqWVzIHNvbnQgZ8OpbsOpcmFsZW1lbnQgcHLDqXNlbnTDqWVzIGVuIG1vZGUgYGxpZ25lc2AsIGMnZXN0LcOgLWRpcmUgY2hhcXVlIGxpZ25lIHJlcHLDqXNlbnRlIHVuZSBvYnNlcnZhdGlvbi4gTGUgbW9kZSBgZW50csOpZXNgIHBlcm1ldCBkJ2Fzc29jaWVyIHBsdXNpZXVycyBsaWduZXMgw6AgdW5lIG9ic2VydmF0aW9uLg0KDQotIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHN0cnVjdHVyZSBkdSBmaWNoaWVyIHBvdXIgcXVlIHBsdXNpZXVycyBsaWduZXMgc29pZW50IGFzc29jacOpZXMgw6AgdW4gc2V1bCBjYXMgZW4gc2UgYmFzYW50IHN1ciBsYSBjb2xvbm5lIGNsw6kgKCoqc2V1bGUgbGEgbGlnbmUgb3JpZ2luYWxlIHNlcmEgbnVtw6lyb3TDqWUqKiksIG1haXMgZG9pdCBzZSBmYWlyZSBhdmVjIHByw6ljYXV0aW9ucy4gUG91ciBsZXMgbG9naWNpZWxzIGQnYW5hbHlzZSwgbGUgZm9ybWF0ICp0aWR5KiAoYGxpZ25lc2ApIGVzdCDDoCBwcml2aWzDqWdpZXIuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KMS4gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLg0KMi4gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4NCjMuIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuDQo0LiBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLg0KNS4gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuDQo2LiBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuDQo3LiBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLg0KOC4gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4NCjkuIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlICpBdXRyZXMqLCDDqWRpdGVyIHNvbiBjb250ZW51IHBvdXIgKmF1dHJlKiBldCBhcHBsaXF1ZXIgw6AgbGEgY2VsbHVsZS4gDQotIERhbnMgbGEgY29sb25uZSAqUG9ydGUqLCBtb2RpZmllciBsZSBmb3JtYXQgZGUgbidpbXBvcnRlIHF1ZWxsZSBjZWxsdWxlIMOgICpOb21icmUqIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMi4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KDQogIA0KIyMjIyBEZXV4IGZvcm1hdHMgZMOpY291bGFudCBkJ2FjdGlvbnM6IA0KICAtIEVycmV1ciAoZm9ybWF0IGF0dHJpYnXDqSBzdWl0ZSDDoCB1bmUgZXJyZXVyIGRlIHRyYW5zZm9ybWF0aW9uKSAgDQogIC0gTnVsbCoqDQoNCg0KDQojIyMjIERldXggYXV0cmVzIHR5cGVzIHBhcnRpY3VsaWVycyBkw6ljb3VsYW50IGRlIG1hbmlwdWxhdGlvbnMNCiAgLSBCb29sw6llbiAodmFsZXVyIGJpbmFpcmUgVCBvdSBGKQ0KICAtICpBcnJheSogKGxpc3RlIGRlIHZhbGV1cnMgc8OpcGFyw6llcyBwYXIgdW5lIHZpcmd1bGUgZW50cmUgY3JvY2hldHMgcG91dmFudCDDqnRyZSB0cmFuc2Zvcm3DqWVzKQ0KDQo8L2JyPg0KDQojIyMjIyAqIEZvcm1hdCBkYXRlDQoNCi0gU2Vsb24gbGVzIGJlc29pbnMsIGxlcyBkYXRlcyBwZXV2ZW50IMOqdHJlIHRyYWl0w6llcyBzb3VzIGZvcm1lIGRlIGB0ZXh0ZWAsIGRlIGBub21icmVgIG91IGBkYXRlYCAobGUgZm9ybWF0IGRhdGUgZXN0IHN1cnRvdXQgbsOpY2Vzc2FpcmUgcG91ciBsZXMgY2FsY3VscyBkZSBkYXRlcykuDQotIExlIGZvcm1hdCBkYXRlIHJlcG9zZSBzdXIgdW5lIHPDqXJpZSBkJ291dGlscyBldCBkZSAgc3RhbmRhcmRzIHBvdXIgcmVjb25uYWl0cmUgZXQgY29udmVydGlyIGxlcyB2YWxldXJzIG9yaWdpbmFsZXMgZW4gZGF0ZS4gDQotIFBvdXIgcXUndW5lIGNlbGx1bGUgc29pdCByZWNvbm51ZSBjb21tZSBkYXRlLCBlbGxlIHNlcmEgdHJhbnNmb3Jtw6llIGF1IGZvcm1hdCAqSVNPLTg2MDEtY29tcGxpYW50Ki4NCi0gUG9zc2libGUgZGUgbW9kaWZpZXIgY2UgZm9ybWF0IHBvdXIgcXUnaWwgc29pdCBwbHVzIGZhY2lsZW1lbnQgbGlzaWJsZSDDoCBsJ2V4cG9ydGF0aW9uLg0KDQo8L2JyPg0KDQojIyMjIyAqKiBGb3JtYXQgIm1hbnF1YW50Ig0KDQotIE9wZW5SZWZpbmUgZmFpdCB1bmUgZGlzdGluY3Rpb24gZW50cmUgbGVzICoqY2VsbHVsZXMgdmlkZXMgYXZlYyBlc3BhY2VzIGJsYW5jcyoqIChxdWkgbmUgc29udCBwYXMgdmlkZXMhKSwgbGVzICoqdmFsZXVycyB2aWRlcyoqIChjaGFpbmUgZGUgbG9uZ3VldXIgMCksIGV0IGxlcyAqKnZhbGV1cnMgIm51bGwiKiogKHR5cGUgc3DDqWNpYWwgcXVpIG4nZXN0IHBhcyB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzKS4gTGVzICp2aWRlcyogZXQgbGVzICpudWxsKiBzb250IGF1c3NpIGNvbnNpZMOpcsOpcyBjb21tZSAqQmxhbmsqLg0KLSBQbHVzaWV1cnMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgc291cyBgRmFjZXR0ZXNgIGV0IGDDiWRpdGVyIGxlcyBjZWxsdWxlc2AgcGVybWV0dGVudCBkZSBnw6lyZXIgY2VzIHR5cGVzIGRlIHZhbGV1cnMuDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRhdGUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcnJhIGF0dHJpYnVlciB1biBmb3JtYXQuIA0KLSBQYXIgZMOpZmF1dCwgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZXN0IGRlIGZvcm1hdCBjaGHDrm5lcy4gIA0KLSBMZSBjb250ZW51IGRlcyBjZWxsdWxlcyByZWNvbm51IGNvbW1lIG51bcOpcmlxdWUgZXQgZGF0ZSBzZXJhIGRlIGNvdWxldXIgdmVydGUuICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IEJvdXRvbiBgZWRpdGAsIGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgRmVuw6p0cmUgR1JFTC4gIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gIA0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4NCi0gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gTGEgZ2VzdGlvbiBkZXMgbGlnbmVzIGV0IGNvbG9ubmVzDQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgY29sb25uZXMgcGV1dCBzZSBmYWlyZToNCg0KLSBTdXIgY2hhcXVlIGNvbG9ubmU6IA0KICAtIEZvbmN0aW9ucyBzb3VzIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRMOpcGxhY2VyIC4uLiAvIFJlbm9tbWVyIC8gU3VwcHJpbWVyYCAgIA0KICAtIEZvbmN0aW9ucyBzb3VzIGBBcGVyw6d1IC0+IE1hc3F1ZXIuLi4gYCAgIA0KDQo8L2JyPg0KDQotIFN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgOiAgICAgDQogIC0gYMOJZGl0ZXIgbGVzIGNvbG9ubmVzIC0+IFJldHJpZXItc3VwcHJpbWVyLCBnZXN0aW9uIGRlcyB2YWxldXJzIGNvbnPDqWN1dGl2ZXNgICAgIA0KICAtIGBBcGVyw6d1IC0+IEFmZmljaGVyLW1hc3F1ZXJgLi4uICANCg0KPC9icj4NCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBsaWduZXM6DQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AgcG91ciBzw6lsZWN0aW9ubmVyIGxlcyBsaWduZXMgbWFycXXDqWVzIChgdHJ1ZWApLiAgDQotIE9uIHBldXQgZW5zdWl0ZSBzdXBwcmltZXIgbGVzIGxpZ25lcyBmaWx0csOpZXM6IGBUb3V0ZXMgLT4gw4lkaXRlciBsZXMgbGlnbmVzIC0+IFN1cHByaW1lciBsZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnRlc2AuICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqU3VwcHJpbWVyIHVuZSBjb2xvbm5lOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUeXBlIGQnaW5jaWRlbnQqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gU3VwcHJpbWVyIGNldHRlIGNvbG9ubmVgLiAgDQoNCioqU3VwcHJpbWVyIHBsdXNpZXVycyBjb2xvbm5lczogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVG91dGVzKiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IMOJZGl0ZXIvU3VwcHJpbWVyIGxlcyBjb2xvbm5lc2AgLT4gKktGUyogZXQgKkNBVCouICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDYuIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGJhc2UNCg0KT3BlbiBSZWZpbmUgcGVybWV0IGRlIHRyYXZhaWxsZXIgZGUgKipkZXV4IGZhw6dvbnMqKjogIA0KDQoNCjEuIEF2ZWMgbCdlbnNlbWJsZSBkZXMgKipmb25jdGlvbnMgYXV0b21hdGlzw6llcyoqIHF1ZSBsJ29uIHJldHJvdXZlIGRhbnMgbGVzIG1lbnVzLg0KDQoyLiBFbiByw6lkaWdlYW50IHNlcyBwcm9wcmVzIFtleHByZXNzaW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucylhdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiouICANCg0KICAtIE3Dqm1lIGxvcnNxdWUgbCdvbiB1dGlsaXNlIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgaWwgZXN0IHBvc3NpYmxlIGQnZW4gbW9kaWZpZXIgbGUgZm9uY3Rpb25uZW1lbnQgZW4gw6lkaXRhbnQgZGlyZWN0ZW1lbnQgbGEgc3ludGF4ZSBHUkVMIGNvcnJlc3BvbmRhbnRlLiANCg0KPC9icj4NCg0KIyMgNi4xLiBVdGlsaXNlciBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXM6DQoNCi0gTGUgbWVudSBldCBsJ2Vuc2VtYmxlIGRlIHNlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBhcHBhcmFpc3NlbnQgZW4gY2xpcXVhbnQgc3VyIGxhIGZsw6hjaGUgZGUgbCdpbnRpdHVsw6kgZGUgY2hhcXVlIGNvbG9ubmUuDQoNCi0gTGVzIGZvbmN0aW9ucyBkaXNwb25pYmxlcyBzb3VzIGxlIG1lbnUgZGUgbGEgcHJlbWnDqHJlIGNvbG9ubmUgYFRvdXRlc2Agc2UgZGlzdGluZ3VlbnQgZGVzIGF1dHJlcyBwdWlzcXUnZWxsZXMgcGVybWV0dGVudCBkJ2FwcGxpcXVlciBkZXMgZm9uY3Rpb25zIMOgIGwnZW5zZW1ibGUgZGVzIGNvbG9ubmVzIGR1IGZpY2hpZXI6IE1hcnF1ZXIsIMOpdG9pbGVyLCBzdXBwcmltZXIsIG1hc3F1ZXIuLi4NCg0KPC9icj4NCg0KIyMjIyBNZW51IGV0IGZvbmN0aW9ucyBkZSBsYSBjb2xvbm5lIGBUb3V0ZXNgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IyMS5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KIyMjIyBNZW51IGV0IGZvbmN0aW9ucyBkZSBjaGFxdWUgY29sb25uZS12YXJpYWJsZQ0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTIuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqKg0KDQojIyA2LjIuIMOJY3JpcmUgc2VzIGZvbmN0aW9ucyBhdmVjIEdSRUwNCg0KPC9icj4NCg0KRXhwcmVzc2lvbnMgc2ltaWxhaXJlcyBhdXggZm9ybXVsZXMgRXhjZWwgbWFpcyBxdWkgcydhcHBsaXF1ZW50IGF1eCBjb2xvbm5lcywgbm9uIGF1eCBjZWxsdWxlcywgZXQgcXVpIG5lIHNvbnQgcGFzIHN0b2Nrw6llcyDDoCBtw6ptZSBsZXMgZG9ubsOpZXMgbWFpcyBkYW5zIHVuIHNjcmlwdC4gIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTQuanBnKQ0KDQoNCjwvYnI+DQoNCiMjIyMgTGUgbGFuZ2FnZSBHUkVMIHBldXQgcyd1dGlsaXNlciBkZSBkaWZmw6lyZW50ZXMgZmHDp29uczogIA0KDQotIEVuIGNyw6lhbnQgZGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyA6IGBGYWNldHRlIC0+IEZhY2V0dGUgdGV4dHVlbGxlIHBlcnNvbm5hbGlzw6llYC4gIA0KDQotIEVuIHRyYW5zZm9ybWFudCB1bmUgY29sb25uZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHRyYW5zZm9ybWVyYCAoYXVzc2kgc291cyBgVG91dGVzIC0+IFRyYW5zZm9ybWVyYCkuICANCg0KLSBFbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBjb2xvbm5lOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgYmFzw6llIHN1ciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQo8L2JyPg0KDQoqKkxlcyBmaWx0cmVzIGV0IGxlcyB0cmFuc2Zvcm1hdGlvbnMgcGx1cyBjb21wbGV4ZXMgcGV1dmVudCBhdXNzaSBuw6ljZXNzaXRlciBsJ3VzYWdlIGQnW2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyAocmVnZXgpXShodHRwczovL3JlZ2V4MTAxLmNvbS8pKioNCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgTW9pcyBDYWxlbmRyaWVyYCAuICAgDQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBKb3VyIGR1IG1vaXNgLiAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiAgIA0KLSBTdXBwcmltZXIgbGUgdHJpIGV0IHJlY29tbWFuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyB1biB0cmkgZGUgZm9ybWF0IG5vbWJyZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDYuNC4gRmlsdHJlciBsZSB0ZXh0ZQ0KDQotIExhIGZvbmN0aW9uIGBGaWx0cmVyIGxlIHRleHRlYCBwZXJtZXQgZGUgY2hlcmNoZXIgdW5lIG91IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIG91IHBsdXNpZXVycyB2YXJpYWJsZXMuICANCi0gUGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgY29sb25uZSBldCBkZSBjb21iaW5lciBkZXMgZmlsdHJlcyBhcHBsaXF1w6lzIHN1ciBwbHVzaWV1cnMgY29sb25uZXMgcG91ciByYWZmaW5lciBsYSByZWNoZXJjaGUuICANCi0gRm9uY3Rpb24gcGx1cyBleHDDqWRpdGl2ZSBxdWUgbGVzIGZhY2V0dGVzIHF1YW5kIG9uIG5lIHZldXQgcXVlIGNoZXJjaGVyIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMuICANCi0gTCdhZmZpY2hhZ2UgZGVzIGxpZ25lcyBzZSBsaW1pdGVyYSBhdSBub21icmUgZGUgY2FzIGNvcnJlc3BvbmRhbnRzIGF1eCBjcml0w6hyZXMgZGUgcmVjaGVyY2hlIGluc2NyaXRzIGRhbnMgbGVzIGJvaXRlcyBkZSBmaWx0cmVzLiAgDQotICoqVGFudCBxdWUgbGVzIGZpbHRyZXMgc2Vyb250IGFjdGlmcywgbGVzIGFjdGlvbnMgc3Vic8OpcXVlbnRlcyBzZSBsaW1pdGVyb250IMOgIGNlcyBjYXMgZmlsdHLDqXMuKiogIA0KDQohW10oaW1hZ2VzL09SNy5qcGcpIA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqOiAiYmVycmkiICANCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqSGV1cmUgZGUgbCdpbmNpZGVudCo6ICIxMiIgIA0KLSBFeHBsb3JlciBsZXMgcsOpc3VsdGF0cyAgDQotIENvbW1lbnQgcydhc3N1cmVyIGQnYXZvaXIgc2V1bGVtZW50IGxlcyBjYXMgc3VydmVudXMgZW50cmUgMTJoIGV0IDEzaD8gQ29tYmllbiBkZSBsaWduZXMgY29ycmVzcG9uZGVudCDDoCBjZXMgY29uZGl0aW9ucz9eWzEyOiBvdSBleHByZXNzaW9uIHJhdGlvbm5lbGxlIF4xMl0gIA0KLSBTdXBwcmltZXIgdG91cyBsZXMgZmlsdHJlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDcuIExlcyBmYWNldHRlcw0KDQojIyA3LjEgQ2FyYWN0w6lyaXN0aXF1ZXMNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL09SMzQuanBnIiAgd2lkdGg9IjYwJSIgLz4NCjwvZGl2Pg0KDQotIExlcyBmYWNldHRlcyBjb25zdGl0dWVudCBsYSBtYXJxdWUgZGUgY29tbWVyY2UgZCdPcGVuUmVmaW5lLCBkJ2/DuSBsZSBsb2dvISANCg0KLSBGb25jdGlvbm5hbGl0w6kgcHVpc3NhbnRlIHF1aSBwZXJtZXQgZCdleHBsb3JlciBldCBkZSBmaWx0cmVyIHNlcyBkb25uw6llcyBlbiBmb25jdGlvbiBkZSBkaWZmw6lyZW50ZXMgY29uZGl0aW9ucy4gIA0KDQotIE4nYWZmZWN0ZW50IHBhcyBkaXJlY3RlbWVudCBsZXMgZG9ubsOpZXMsIHNldWxlbWVudCBsYSBwcsOpc2VudGF0aW9uLiAgDQoNCi0gw4AgbGEgYmFzZSwgdW5lIGZhY2V0dGUgY29ycmVzcG9uZCDDoCBsYSBsaXN0ZSBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZCd1bmUgdmFyaWFibGUgIChldCBkZSBsZXVyIG9jY3VycmVuY2UpIHByw6lzZW50w6llIHNlbG9uIGxlIGZvcm1hdCAoY2hhaW5lLCBudW3DqXJpcXVlLCBkYXRlKS4gIA0KDQotIFBlcm1ldHRlbnQgdW5lIGV4cGxvcmF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZXQgZGUgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzIHBsdXMgw6lsYWJvcsOpZXMgcXVlIGxlcyBmaWx0cmVzLiAgDQoNCi0gT24gcGV1dCBhaW5zaSBpZGVudGlmaWVyIGxlcyB0ZW5kYW5jZXMsIGxlcyByw6lndWxhcml0w6lzLCBsZXMgZXJyZXVycywgbGVzIMOpY2FydHMsIGxlcyByw6lww6l0aXRpb25zIGV0ICBjaWJsZXIgbGVzIHZhbGV1cnMgZGUgc291cy1ncm91cGVzIHByw6ljaXMuICANCg0KLSBDZXMgc291cy1ncm91cGVzIHBldXZlbnQgZW5zdWl0ZSDDqnRyZSDDqWRpdMOpcyBldCBleHBvcnTDqXMgKGJvdXRvbiBgRXhwb3J0ZXJgIGVuIGhhdXQgw6AgZHJvaXRlKS4gDQoNCjwvYnI+DQoNCiMjIyBEZXV4IHR5cGVzIGRlIGZhY2V0dGVzOg0KDQogIC0gTGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgKipbMV0qKi4gICANCiAgPC9icj4NCiAgLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICoqWzJdKiouICANCiAgPC9icj4NCiAgICAtIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAqKlszXSoqIChvbiBwYXJsZSBlbmNvcmUgaWNpIGRlICpmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMqLCBtYWlzIGVsbGVzIGRvaXZlbnQgw6p0cmUgcsOpZGlnw6llcyBtYW51ZWxsZW1lbnQpLg0KDQo8L2JyPg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMy5qcGcpDQoNCjwvY2VudGVyPiAgDQogICAgLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQogICAgLSAqKls5XSoqIFBvdXIgc3VwcHJpbWVyIGxlcyBmYWNldHRlcywgY2xpcXVlciBzdXIgbGUgeCBkZSBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgc3VwcHJpbWVyYC4gIA0KICAgIC0gUG91ciBjb25zZXJ2ZXIgbGVzIGZlbsOqdHJlcyBtYWlzIHN1cHByaW1lciBsZXMgc8OpbGVjdGlvbnMgcXVpIHkgb250IMOpdMOpIGZhaXRlcywgY2xpcXVlciBzdXIgYHLDqWludGlhbGlzZXJgIHN1ciBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgcsOpaW5pdGlhbGlzZXJgICoqWzldKiouICANCiAgICAtICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQoNCiMjIyBUcm9pcyBmb3JtYXRzIGRlIGZhY2V0dGVzOg0KDQpPbiByZXRyb3V2ZSDDqWdhbGVtZW50IGRpZmbDqXJlbnRzICoqZm9ybWF0cyBkZSBmYWNldHRlcyoqIC0+IHVuZSBwb3VyIGNoYXF1ZSBmb3JtYXQgZGUgZG9ubsOpZXMgKExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgcHJvcG9zZW50IGF1c3NpIGRlcyBmYWNldHRlcyBib29sw6llbm5lcykuICAgDQoNCg0KIyMjIyAxLiBGYWNldHRlIHRleHR1ZWxsZSAqKls0LTVdKiogDQoNCi0gVHlwZSBkZSBmYWNldHRlIGxlIHBsdXMgc291dmVudCB1dGlsaXPDqS4gICANCi0gUmVncm91cGVudCBkYW5zIGxhIGZlbsOqdHJlIGRlIGdhdWNoZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzICh0ZXh0dWVsbGVzIG91IG51bcOpcmlxdWVzKSBkZXMgY29sb25uZXMgdm91bHVlcy4gICANCiAgLSBPbiBwZXV0IGZhaXJlIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgdW5lIGNvbG9ubmUgbnVtw6lyaXF1ZSBtYWlzIHBhcyBsJ2ludmVyc2UuICANCiAgLSAyMDAwIHZhbGV1cnMgbWF4aW11bSBwYXIgZMOpZmF1dCBtYWlzIHBldXQgw6p0cmUgbW9kaWZpw6kgZGFucyBsZXMgcHLDqWbDqXJlbmNlcy4gU2kgbGVzIHZhbGV1cnMgc29udCB0cm9wIG5vbWJyZXVzZXMsIGVsbGVzIG5lIHNlcm9udCBwYXMgbGlzdMOpZXMgKHVuIGZpbHRyZSBwb3VycmFpdCDDqnRyZSB1dGlsaXPDqSkuIA0KLSBQZXJtZXR0ZW50IGRlIGNvbWJpbmVyIGRpZmbDqXJlbnRzIGZpbHRyZXMgZW4gc8OpbGVjdGlvbm5hbnQgZGlmZsOpcmVudGVzIHZhbGV1cnMgZCd1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcyAoZXQgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzKS4gICANCiAgLSBDbGlxdWVyIGBpbmNsdXJlYCBvdSBgZXhjbHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICAgDQogIC0gUGV1dmVudCDDqnRyZSB0cmnDqWVzIHNlbG9uIGxlIG5vbSBvdSBsZSBjb21wdGUgKG5vbWJyZSBkJ29jY3VycmVuY2VzKS4gICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCg0KIyMjIyAyLiBGYWNldHRlIG51bcOpcmlxdWUgKipbN10qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCg0KIyMjIyAzLiBGYWNldHRlIGNocm9ub2xvZ2lxdWUgKipbNl0qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCg0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD9eW0NsaWVudMOobGUgLyBCbGVzc8OpZSBvdSBtYWxhZGUsIE3DqWZhaXQgdm9sb250YWlyZSwgTnVpc2FuY2UgaW52b2xvbnRhaXJlIC8gTcOpZmFpdCB2b2xvbnRhaXJlIDc4MS8gNV0gICANCi0gUsOpaW5pdGlhbGlzZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCg0KKirDiWRpdGVyKiogIA0KDQotIERhbnMgbGEgZmFjZXR0ZSAqQ2F1c2UgcHJpbWFpcmUqLCByZW5vbW1lciBsYSB2YWxldXIgI05EIC0+IE5BLiAgDQotIENvcnJpZ2VyIGxhIHZhbGV1ciAiYXV0cmUiIHBvdXIgcXUnZWxsZSBzb2l0IGZ1c2lvbm7DqWUgw6AgbGEgdmFsZXVyICJBdXRyZXMiLiAgDQotIFN1cHByaW1lciB0b3V0ZXMgbGVzIGZhY2V0dGVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRmlsdHJlcioqIA0KDQotIFF1ZWwgZXN0IGxlICpzeW1wdG9tZSogbGUgcGx1cyBmcsOpcXVlbnQ/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiAgDQotIFN1ciBxdWVsbGUgKkxpZ25lKiBjZSAqc3ltcHRvbWUqIHMnZXN0IHByb2R1aXQgbGUgcGx1cyBzb3V2ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBDZXMgw6l2w6luZW1lbnRzIG9udC1pbHMgbsOpY2Vzc2l0w6kgdW5lICrDqXZhY3VhdGlvbio/XltDbGllbnTDqGxlIC8gTGlnbmUgb3JhbmdlIC8gT3VpIDE3XSAgICAgDQoNCioqw4lkaXRlcioqICANCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gIA0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMi4gTGVzIHJlZ3JvdXBlbWVudHMgKGNsdXN0ZXJpbmcpDQoNCi0gRm9uY3Rpb24gcXVpIHBlcm1ldCBkJ2lkZW50aWZpZXIgZGFucyB1bmUgY29sb25uZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzIHF1aSBwb3VycmFpZW50IGF2b2lyIGxhIG3Dqm1lIHNpZ25pZmljYXRpb24gb3UgcXVpIHBvdXJyYWllbnQgw6p0cmUgcmVncm91cMOpZXMgZGFucyB1bmUgbcOqbWUgY2F0w6lnb3JpZSA9ICJ2YXJpYXRpb25zIHN1ciBsZSBtw6ptZSB0aMOobWUiIMOpdmFsdcOpZXMgZW4gZm9uY3Rpb24gZGUgW2RpZmbDqXJlbnRzIGFsZ29yaXRobWVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvQ2x1c3RlcmluZy1Jbi1EZXB0aCkuIA0KDQotIENoYXF1ZSBzdWdnZXN0aW9uIGRvaXQgw6p0cmUgYXBwcm91dsOpZSBpbmRpdmlkdWVsbGVtZW50IHBvdXIgcXVlIGxlcyBtb2RpZmljYXRpb25zIHMnYXBwbGlxdWVudCAobGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIG5lIHNvbnQgcGFzIG7DqWNlc3NhaXJlbWVudCBwZXJ0aW5lbnRzKS4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGVzICpjbHVzdGVycyogc2Vsb24gZGlmZsOpcmVudGVzIG3DqXRob2RlcyBwbHVzIG91IG1vaW5zIMOpbGFib3LDqWVzICgqUHJvY2hlIHZvaXNpbiogcHJlbmQgcGx1cyBkZSBtw6ltb2lyZSkgcXVpIHBlcm1ldHRlbnQgZGUgcmVncm91cGVyIGxlcyB2YWxldXJzIHNpbWlsYWlyZXMgZXQgcHJvcG9zZW50IGRlcyBtYXRjaHMgcG9zc2libGVzICgqZnV6enkgbWF0Y2hpbmcqKTogcGFyIGV4ZW1wbGUgKmVtcHJlaW50ZSogZXN0IHBsdXMgY29uc2VydmF0ZXVyIChkaXN0aW5ndWUgY2Fzc2UsIGVzcGFjZXMsIG9yZHJlLCByw6lww6l0aXRpb24sIHBvbmN0dWF0aW9uLi4uKSwgKm5ncmFtKiBlc3QgcGx1cyBmbGV4aWJsZSAobcOqbWVzIGNhcmFjdMOocmVzKSwgKk1ldGFwaG9uZTMqIGVzdCBsZSBwbHVzICJsaWLDqXJhbCIgKG3Dqm1lIHByb25vbmNpYXRpb24pLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgdGV4dHVlbGxlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqLiAgDQotIENsaXF1ZXIgc3VyIGBHcm91cGVgIGV0IGV4cGxvcmVyIGxlcyByZWdyb3VwZW1lbnRzIGVuIGZvbmN0aW9uIGRlcyBkaWZmw6lyZW50cyBhbGdvcml0aG1lcy4gIA0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMy4gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyANCg0KDQotIEZvbmN0aW9ubmVudCBjb21tZSBkZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcyBzYXVmIHF1J29uIG5lIHBldXQgw6lkaXRlciBlbiBmb25jdGlvbiBkZSBjZXMgcsOpc3VsdGF0cyBjYXIgZWxsZXMgcHLDqXNlbnRlbnQgZGVzIGRvbm7DqWVzIG1vZGlmacOpZXMgZW4gbcOpbW9pcmUuDQoNCi0gT250IMOpdMOpIGTDqXZlbG9wcMOpZXMgZXQgYXV0b21hdGlzw6llcyBhZmluIGQnZXhwbG9yZXIgZGVzIGFzcGVjdHMgcHLDqWNpcyBkZXMgZG9ubsOpZXMgc2FucyBhdm9pciDDoCBsZXMgIHLDqWRpZ2VyIGVuIHN5bnRheGUgR1JFTDogDQoNCiAgLSBgRmFjZXR0ZSBwYXIgbW90YCA6IERpdmlzZSBjaGFxdWUgbW90IChzw6lwYXLDqSBkJ3VuIGVzcGFjZSkgZCd1bmUgY29sb25uZSBldCBsZXMgcHLDqXNlbnRlIGVuIGxpc3RlIGRlIHZhbGV1cnMgZGlzdGluY3RlcyBbdmFsdWUuc3BsaXQoIiAiKV0uDQogIA0KICAtIGBGYWNldHRlIGRvdWJsb25zYDogdmFsZXVycyBib29sw6llbm5lcyBpbmRpcXVhbnQgc2kgbGVzIHZhbGV1cnMgc29udCB1bmlxdWVzIChmYWxzZSkgb3Ugbm9uICh0cnVlKSBbZmFjZXRDb3VudCh2YWx1ZSwgJ3ZhbHVlJywgJ1N5bXB0b21lJykgPiAxXS4gIA0KICANCiAgLSBgRmFjZXR0ZXMgbG9nYXJpdGhtaXF1ZXNgOiBtb2RpZmljYXRpb24gbG9nYXJpdGhtaXF1ZSBkZSB2YWxldXJzIG51bcOpcmlxdWVzIFt2YWx1ZS5sb2coKV0uDQogIA0KICAtIGBGYWNldHRlIGxvbmd1ZXVyIGRlIHRleHRlYDogbGlzdGUgbGUgbm9tYnJlIGRlIGNhcmFjdMOocmVzIGR1IGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgW3ZhbHVlLmxlbmd0aCgpXS4NCiAgDQogIC0gRmFjZXR0ZXMgcGVybWV0dGFudCBkJ2V4cGxvcmVyIGxlcyB2YWxldXJzIGQnYGVycmV1cmAsIGBudWxsZXNgLCBgdmlkZXNgLi4uIFtpc0VtcHR5U3RyaW5nKHZhbHVlKV0NCg0KKioqIA0KDQoNCiMgOC4gTGUgbGFuZ2FnZSBHUkVMIA0KDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyMgIDguMS4gR1JFTCAtIFByaW5jaXBlcyBkZSBiYXNlIA0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBJbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipTw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkJ29ww6lyYXRldXJzOiAgDQpTZWxvbiBsZSBmb3JtYXQsIGRpZmbDqXJlbnRzIHR5cGVzIGQnKipvcMOpcmF0ZXVycyoqIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIGVudHJlIGxlcyB2YWxldXJzOiAgDQoJLSBPcMOpcmF0ZXVycyBhcml0aG3DqXRpcXVlczogKywgLSwgKiwgLyAgDQoJLSBPcMOpcmF0ZXVycyBib29sw6llbnM6ID09LCA+LCA8ICANCiAgDQoqKlBhciBleGVtcGxlOioqDQoNCi0gTGUgIisiIGVudHJlIGRldXggY29udGVudXMgbnVtw6lyaXF1ZXMgPSBzb21tZQ0KDQohW10oaW1hZ2VzL09SMzAuanBnKQ0KDQotIExlICIrIiBhdmVjIHVuIGNvbnRlbnUgdGV4dHVlbCA9IGNvbmNhdMOpbmF0aW9uDQoNCiFbXShpbWFnZXMvT1IzMS5qcGcpDQoNCjwvYnI+DQoNCioqKiAgDQoNCiMjIyAgOC4yLiBHUkVMIC0gTCdpbmRleGF0aW9uLCBsYSBzw6lsZWN0aW9uIGV0IGxhIG1hbmlwdWxhdGlvbiBkJ8OpbMOpbWVudHM6ICANCg0KLSBDaGFxdWUgY2FyYWN0w6hyZSBjb21wb3NhbnQgdW5lIHZhbGV1ciBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpIGV0IHBldXQgw6p0cmUgY2libMOpIGdyw6JjZSBhdXggYFsgXWAuDQotIERlIGxhIG3Dqm1lIGZhw6dvbiwgY2hhcXVlIMOpbMOpbWVudCBkJ3VuICphcnJheSogZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLiAgDQoNCj4gYHZhbHVlLnNwbGl0KCIoIilbMV1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCj4gYHZhbHVlLnNwbGl0KCIoIilbMV0uc3BsaXQoIikiKVswXWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gIA0KDQo8L2JyPg0KDQoqKkV4ZW1wbGUgMSoqDQoNCmBNYXJ0aW5vbGxpLCBQYXNjYWw7IEdhYnJpZWxsaSwgTmlubzsgRm9ydGllciwgQ2F0aGVyaW5lOyBCZWxsZW1hcmUsIFBhc2NhbGVgDQoNCiFbXShpbWFnZXMvT1IyNS5qcGcpDQoNCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNvcnQoKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI2LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsNCi0gYHNvcnQoKWA6IHRyaSBsZXMgw6lsw6ltZW50cw0KLSBgam9pbigpYDogbGVzIGpvaW50cyBhdmVjIGxlIHPDqXBhcmF0ZXVyIDsNCg0KPC9icj4NCg0KKipFeGVtcGxlIDIqKiAgIA0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc2xpY2UoMSkuam9pbigiOyAiKWAgDQoNCiFbXShpbWFnZXMvT1IyNy5qcGcpDQoNCi0gYHNsaWNlKClgIDogY29uc2VydmUgbGVzIMOpbMOpbWVudHMgw6AgcGFydGlyIGRlIGwnw6lsw6ltZW50IDEgZG9uYyBzdXBwcmltZSBsZSAwLiANCg0KPC9icj4NCg0KKipFeGVtcGxlIDMqKg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIilbMV0uc3BsaXQoIiwgIikucmV2ZXJzZSgpLmpvaW4oIiAiKSArICIgZXN0IGxlIG1laWxsZXVyImAgDQoNCiFbXShpbWFnZXMvT1IzOC5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2UgbGEgY2VsbHVsZSBlbiDDqWzDqW1lbnRzIGRpc3RpbmN0cyBzdXIgbGEgYmFzZSBkdSBzw6lwYXJhdGV1ciA7DQotIGBzbGljZSgpYDogcmV0aWVudCBsZSBkZXV4acOobWUgw6lsw6ltZW50DQotIGBzcGxpdCgpYDogZGl2aXNlIGNldCDDqWzDqW1lbnQgc3VyIGxlIHPDqXBhcmF0ZXVyICwNCi0gYHJldmVyc2UoKWA6IGludmVyc2UgbCdvcmRyZSBkZXMgZGV1eCDDqWzDqW1lbnRzDQotIGBqb2luKClgOiByYXR0YWNoZSBsZXMgZGV1eCDDqWzDqW1lbnRzIGRpdmlzw6kgYXZlYyB1biBlc3BhY2UNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGNvbW1lbmNlIHBhciAiQ8O0dGUiICANCg0KYHZhbHVlLnN0YXJ0c1dpdGgo4oCcQ8O0dGXigJ0pYCAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHByaW1haXJlKiBlc3QgbGEgbcOqbWUgcXVlIGRhbnMgbGEgY29sb25uZSAqQ2F1c2Ugc2Vjb25kYWlyZSoNCg0KYHZhbHVlID09IGNlbGxzWyJDYXVzZSBzZWNvbmRhaXJlIl0udmFsdWVgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBsaXN0ZXIgbGVzIGNhcyBzZWxvbiBsJypoZXVyZSBkZSBsJ2luY2lkZW50KiBzZXVsZW1lbnQsIHNhbnMgbGVzIG1pbnV0ZXMgKDIgcHJlbWllcnMgY2FyYWN0w6hyZXMpLiBDb21tZW50IGZhaXJlIGFmZmljaGVyIGxlcyBtaW51dGVzIHNldWxlbWVudD9eW3ZhbHVlWzMsNV0gb3UgdmFsdWUuc3Vic3RyaW5nKDMpXSANCg0KYHZhbHVlWzAsMl1gICAgDQoNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCg0KIyA5LiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KUG91ciB2b2lyIGxhIHN5bnRheGUgY29ycmVzcG9uZGFudCDDoCBjaGFxdWUgZm9uY3Rpb24gZGUgYHRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBhcHBsaXF1ZXIgbGEgZm9uY3Rpb24gc3VyIHVuZSBjb2xvbm5lIHB1aXMgYWxsZXIgdm9pciBsJ2hpc3RvcmlxdWUuIFBhciBleGVtcGxlOiBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1RpdGxlY2FzZSgpYCwgYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9VcHBlcmNhc2UoKWAsIGB2YWx1ZS50cmltKClgLi4uIDwvZGl2Pg0KDQoqKioNCg0KIyMgOS4xLiBDcsOpZXIgZXQgY29waWVyIGRlcyBjb2xvbm5lcw0KDQo8L2JyPg0KDQpgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZWANCg0KIVtdKGltYWdlcy9PUjMyLmpwZykNCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHN1ciBsYSBiYXNlIGRlIGxhIGNvbG9ubmUgKkpvdXIgZGUgbGEgc2VtYWluZSogaW5kaXF1YW50IHNpIGxlIGpvdXIgZXN0IGVuIHNlbWFpbmUgb3UgZmluIGRlIHNlbWFpbmUuDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgaWYodmFsdWUgPiA1LCJmaW4gZGUgc2VtYWluZSIsInNlbWFpbmUiKWANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBjb2xvbm5lIMOgIHBhcnRpciBkZSBsYSBjb2xvbm5lICpoZXVyZSBkZSBsJ2luY2lkZW50KiBlbiBuZSBjb25zZXJ2YW50IHF1ZSBsJ2hldXJlLCBzYW5zIGxlcyBtaW51dGVzLCBldCByYWpvdXRlciBsYSBsZXR0cmUgaCBwb3VyIGRvbm5lciBwYXIgZXhlbXBsZSBjZWNpOiAxNToxMiAgLT4gIDE1aC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYHZhbHVlLnNwbGl0KCc6JylbMF0gKyAiaCJgLiAgDQoNCk91DQoNCmB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygyKVswXWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKiogDQoNCg0KIyMgOS4yLiBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgbXVsdGl2YXJpw6llcw0KDQotICoqRGV1eCBvcHRpb25zOiAqKiAgDQogIDEuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuICoqcGx1c2lldXJzIGNvbG9ubmVzKio6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgICANCiAgMi4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBzdXIgKipwbHVzaWV1cnMgbGlnbmVzKio6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBEaXZpc2VyIGxlcyBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzYCAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzNy5qcGcpICANCg0KLSBMYSBwcmVtacOocmUgb3B0aW9uIGVzdCBsYSBwbHVzIGZyw6lxdWVudGUuIA0KLSBMYSBkZXV4acOobWUgb3B0aW9uIGF1cmEgdW4gZWZmZXQgaW1wb3J0YW50IHN1ciBsYSBzdHJ1Y3R1cmUgZGVzIG9ic2VydmF0aW9ucyBwdWlzcXUnZWxsZSBtdWx0aXBsaWVyYSBsZSBub21icmUgZGUgbGlnbmVzIHBhciBjYXMgKGNlIHF1aSBuw6ljZXNzaXRlcmEgZGUgcGFzc2VyIMOgIGxhIHZ1ZSBwYXIgYGVudHLDqWVzYCkuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpUcmFuc2Zvcm1lciBsYSB2YXJpYWJsZSAqTGlnbmUqDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlVuaWZvcm1pc2VyIGxlIG5vbSBkZXMgbGlnbmVzOioqICANCg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgTGlnbmUuIA0KDQotIERldXggcHJvYmzDqG1lcyBzZSBwb3NlbnQ6IDEpIGxlcyBub21zIGRlIGxpZ25lcyBub24gdW5pZm9ybWVzIGV0IDIpIGxlcyB2YWxldXJzIG11bHRpcGxlcy4gIA0KDQotIE5vdXMgY2hvaXNpc3NvbnMgZCd1bmlmb3JtaXNlciBsZXMgdmFsZXVycyBlbiB1dGlsaXNhbnQgbGVzIG51bcOpcm9zIGRlIGxpZ25lcyBldCBlbiBzdXBwcmltYW50IGxlIG1vdCBMaWduZS4gIA0KDQotIEV4cGxvcmVyIGV0IGFjY2VwdGVyIGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBhdmVjIGxhIGZvbmN0aW9uIGBHcm91cGVgLiAgDQoNCi0gU3VwcHJpbWVyIGxlIG1vdCBsaWduZTogIA0KDQogIC0gYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHJlbXBsYWNlcmAgLT4gIkxpZ25lIiBwYXI6IG5lIHJpZW4gc2Fpc2lyIGRhbnMgbCdlbmNhZHLDqS4gICAgDQoNCi0gQ2xpcXVlciBlbnN1aXRlIGRpcmVjdGVtZW50IHN1ciBgZWRpdGAgc3VyIHVuZSBjZWxsdWxlIGRlIGxhIGNvbG9ubmUgZGUgKkxpZ25lKiAtPiByZW1hcnF1ZXIgbGEgcHLDqXNlbmNlIGQndW4gZXNwYWNlLCBzdXBwcmltZXIgbCdlc3BhY2UgZXQgZmVybWVyLiANCg0KLSBSYWZyYWljaGlyIGxhIGZhY2V0dGUgZXQgb2JzZXJ2ZXIgbCdpbXBhY3QuIA0KDQotIFJlbWFycXVlciBsJ2ltcGFjdCBkZSBsJ2VzcGFjZSBkYW5zIGxhIGZhY2V0dGUuIENlcyBlc3BhY2VzIHBldXZlbnQgw6p0cmUgc3VwcHJpbcOpcyBncsOiY2Ugw6AgbGEgZm9uY3Rpb246IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IFN1cHByaW1lciBsZXMgZXNwYWNlcyBkZSBkw6lidXQgZXQgZGUgZmluYC4gICANCi0gUmVtcGxhY2VyIGxlcyBjb3VsZXVycyBkZSBsaWduZSBwYXIgbGV1ciBudW3DqXJvIGRpcmVjdGVtZW50IGRhbnMgbGEgZmFjZXR0ZS4gICANCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRGl2aXNlciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiBjcsOpYW50IGRlcyBjb2xvbm5lcyBhdmVjIHVuZSBzZXVsZSB2YWxldXIgICoqDQoNCi0gRGFucyBsYSBmYWNldHRlLCByZW1wbGFjZXIgbGVzICItIiBwYXIgZGVzICIsIi4gICAgDQoNCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2A6DQogIC0gRMOpZmluaXIgbGUgc8OpcGFyYXRldXIgIiwiIChjZWx1aS1jaSBkaXNwYXJhaXRyYSkuICANCiAgLSBEw6ljb2NoZXIgbGVzIG9wdGlvbnMgIkRldmluZXIiIGV0ICJTdXBwcmltZXIiLiAgDQotIExlcyBub3V2ZWxsZXMgY29sb25uZXMgcmVwcmVuZHJvbnQgbGUgbm9tIGRlIGwnb3JpZ2luYWwgbnVtw6lyb3TDqS4gTGVzIHJlbm9tbWVyOiBwcmVtaWVyZSwgZGV1eGllbWUsIHRyb2lzaWVtZSwgcXVhdHJpZW1lLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkRpdmlzZXIgcGFyIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzIGxhIGNvbG9ubmUgYE51bcOpcm8gZCdpbmNpZGVudGAgcG91ciBlbiBjcsOpZXIgZGV1eCBub3V2ZWxsZXM6ICANCiAgMS4gVW5lIGNvbG9ubmUgY29udGVuYW50IGxlIHByZW1pZXIgY2FyYWN0w6hyZSBpbmRpcXVhbnQgbGUgdHlwZSBkJ2luY2lkZW50LCBzb2l0IFQgKHRyYWluKSBvdSBTIChzZXJ2aWNlKS4gIA0KICAyLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbCdlbnNlbWJsZSBkZXMgY2FyYWN0w6hyZXMgbnVtw6lyaXF1ZXMgaW5kaXF1YW50IGxlIG51bcOpcm8gZCdpbmNpZGVudC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipWw6lyaWZpY2F0aW9ucyBwcsOpYWxhYmxlczoqKg0KICAxLiBWw6lyaWZpZXIgcXUnaWwgbid5IGEgcGFzIGRlIGRvdWJsb24gZGFucyBjZXR0ZSBjb2xvbm5lOiBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgZG91YmxvbmAgLT4gUXVlbCBlc3QgbGUgcHJvYmzDqG1lPyAgQ2xpcXVlciBzdXIgYENoYW5nZXJgIGV0IGFuYWx5c2VyIGwnZXhwcmVzc2lvbi4gIA0KICAyLiBWw6lyaWZpZXIgbGEgbG9uZ3VldXIgZGUgY2hhcXVlIGNhczogIGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBsb25ndWV1ciBkdSB0ZXh0ZWAuICAgIA0KDQoqKkRpdmlzZXIgbGEgY29sb25uZToqKiAgDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXMgc2Vsb24gbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHNgIDogMSwgOC4gICAgDQotIETDqWNvY2hlciA6IGRldmluZXIgbGUgdHlwZSBkZSBjZWxsdWxlIGV0IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lLiAgICANCi0gUmVub21tZXIgbGVzIGNvbG9ubmVzIDogVHlwZSBldCBJRC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIyBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDkuMy4gRnVzaW9ubmVyIGxlIGNvbnRlbnUgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCiMjIyBEw6lmaXQgICANCk5vdXMgc291aGFpdG9ucyBjYWxjdWxlciBsYSBkdXLDqWUgZGVzIGluY2lkZW50cy4gUG91ciBjZSBmYWlyZSBub3VzIGNyw6llcm9ucyBkZXV4IGNvbG9ubmVzOiAgDQotIFVuZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQotIFVuZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpMb3JzcXVlIGwnb24gZnVzaW9ubmUgZGVzIGNvbG9ubmVzLCBpbCBmYXV0IHBvcnRlciB1bmUgYXR0ZW50aW9uIHBhcnRpY3VsacOocmUgYXUgc8OpcGFyYXRldXIgY2hvaXNpLiBOZSBwYXMgdXRpbGlzZXIgdW4gY2FyYWN0w6hyZSBxdWkgcG91cnJhaXQgZmFpcmUgcGFydGllIGR1IGNvbnRlbnUgKGV4OiAsKSBvdSBxdWkgc2VydmlyYSDDoCBkaXZpc2VyIGxlcyBjb2xvbm5lcyAoLmNzdikNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMS4gKipGb25jdGlvbiBhdXRvbWF0aXPDqWUqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiBgw4lkaXRlciBsYSBjb2xvbm5lYCAtPiBgSm9pbmRyZSBsZXMgY29sb25uZXNgLiAgICANCi0gSm9pbmRyZSBkZXMgY29sb25uZXMgLT4gQ29jaGVyIGxlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQotIFPDqXBhcmF0ZXVyIGVudHJlIGxlIGNvbnRlbnUgZGUgY2hhcXVlIGNvbG9ubmU6ICItIi4gICAgDQotIMOJY3JpcmUgbGUgcsOpc3VsdGF0IGRhbnMgdW5lIG5vdXZlbGxlIGNvbG9ubmUgbm9tbcOpZTogKkRhdGUqLiAgICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoyLiAqKkZlbsOqdHJlIEdSRUwqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIHJlcHJpc2UqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVsOpcmlmaWVyIGxhIHRyYW5zZm9ybWF0aW9uIGF2ZWMgdW5lIGZhY2V0dGUgYHZhbHVlLnR5cGUoKWAuICANCg0KLSBSZWNvbW1lbmNlciBsYSBqb2ludHVyZSBwb3VyIGNyw6llciB1bmUgY29sb25uZSBhdmVjIGxhIGRhdGUtaGV1cmUgZGUgZmluIGRlIGwnaW5jaWRlbnQNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNhbGN1bGVyIGxhIGR1csOpZSBkZSBsJ2luY2lkZW50ICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgdmlkZTogIA0KYEVkaXQgQ29sdW1uID4gQWRkIENvbHVtbiBCYXNlZCBvbiBUaGlzIENvbHVtbiBgIC0+IENob2lzaXIgdW4gbm91dmVhdSBub20gZXQgbGUgY29udGVudTogIiIuICANCg0KLSBQb3VyIGNhbGN1bGVyIHVuZSBkaWZmw6lyZW5jZSBlbnRyZSBkYXRlOiBgZGlmZihkYXRlMSwgZGF0ZTIsICJyZXN1bHRzIGZvcm1hdCIpYC4gICAgDQoNCmBkaWZmKGNlbGxzWydkYXRlMiddLnZhbHVlLGNlbGxzWydkYXRlMSddLnZhbHVlLCAnbWludXRlcycpYC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDEwLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KPC9icj4NCg0KLSBMJ3VzYWdlIGRlIEdSRUwgcGVybWV0IGRlcyBtYW5pcHVsYXRpb25zIGRlIGRvbm7DqWVzIGJlYXVjb3VwIHBsdXMgYXZhbmPDqWVzIHF1ZSBsJ3V0aWxpc2F0aW9uIGRlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgbWFpcyBPcGVuUmVmaW5lIHBlcm1ldCBlbiBwbHVzIGRlIGNvbWJpbmVyIGwndXRpbGlzYXRpb24gZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBhdmVjIEdSRUwgcG91ciBlbiBhdWdtZW50ZXIgbGEgcHVpc3NhbmNlLiANCi0gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXJtZXR0ZW50LCDDoCBwYXJ0aXIgZCd1bmUgc3ludGF4ZSBzcMOpY2lmaXF1ZSwgZCdpZGVudGlmaWVyIGRlcyBwYXR0ZXJucyBkYW5zIHVuIGNvbnRlbnUuICANCi0gTG9yc3F1J3V0aWxpc8OpZXMgYXZlYyBHUkVMLCBjZXMgZXhwcmVzc2lvbnMgcGVybWV0dGVudCBkb25jIGQnaWRlbnRpZmllciBldCBkJ2V4dHJhaXJlIGRlcyBjb250ZW51cyB0csOocyBwcsOpY2lzIHBvdXIgZW5zdWl0ZSBsZXMgbWFuaXB1bGVyIHNlbG9uIGxlcyBiZXNvaW5zLiAgDQotIEVsbGVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyDDoCBkaWZmw6lyZW50cyBlbmRyb2l0cyBkYW5zIE9wZW5SZWZpbmUgZXQgZG9pdmVudCB0b3Vqb3VycyDDqnRyZSBlbnRvdXLDqWVzIGRlIGAvIC9gOiBmaWx0cmVzLCBmYWNldHRlcywgZmVuw6p0cmUgR1JFTC4NCi0gQ2VydGFpbmVzIGV4cHJlc3Npb25zIHBldXZlbnQgcyfDqWNyaXJlIGVuIEdSRUwgYXZlYyBvdSBzYW5zIHJlZ2V4LiAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzMy5qcGcpDQoNCg0KLSBNYWlzIGNlcnRhaW5lcyBmb25jdGlvbnMgKGNvbW1lIGBtYXRjaGApIG4nYWNjZXB0ZW50IHF1ZSBjZXMgZXhwcmVzc2lvbnMuICANCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQoNCkxlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIGF2ZWMgcGx1c2lldXJzIGF1dHJlcyBsYW5nYWdlcyBkb250IFtSXShodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vYS1nZW50bGUtaW50cm9kdWN0aW9uLXRvLXJlZ3VsYXItZXhwcmVzc2lvbnMtd2l0aC1yLWRmNWU4OTdjYTQzMikgZXQgW1B5dGhvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9yZWdleC5odG1sKSBldCBkYW5zIGRlcyBsb2dpY2llbHMgcXVpIG4nb250IHJpZW4gw6Agdm9pciBhdmVjIGxlcyBzdGF0aXN0aXF1ZXMgY29tbWUgW09wZW5PZmZpY2VdKGh0dHBzOi8vd2lraS5vcGVub2ZmaWNlLm9yZy93aWtpL0RvY3VtZW50YXRpb24vSG93X1Rvcy9SZWd1bGFyX0V4cHJlc3Npb25zX2luX1dyaXRlcikuDQoNClBvdXIgZW4gc2F2b2lyIHBsdXM6ICANCi0gaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1VuZGVyc3RhbmRpbmctUmVndWxhci1FeHByZXNzaW9ucyAgDQotIGh0dHBzOi8vcmVnZXgxMDEuY29tLyAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMjIExhIHN5bnRheGUgZGUgYmFzZTogICANCg0KTGEgc3ludGF4ZSBlc3QgY29tcG9zw6llIGQnw6lsw6ltZW50cyBwZXJtZXR0YW50IGRlICBjaWJsZXIgZGVzIGNhcmFjdMOocmVzIHByw6ljaXMgZXQgZGUgZMOpZmluaXIgbGV1ciBlbXBsYWNlbWVudCBldCBsZXVyIG9jY3VycmVuY2UuDQoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgVFlQRVMgREUgQ0FSQUNUw4hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVVBTlRJRklDQVRFVVJTIEVUIEVNUExBQ0VNRU5UICAgICAgICAgICAgICAgICB8IA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgLmAgOiBO4oCZaW1wb3J0ZSBxdW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYCtgIDogMSBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcd2AgOiBuJ2ltcG9ydGUgcXVlbCBtb3QsIGNoaWZmcmUgb3UgXyAgICAoYFxXYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICAgICB8IGAqYCA6IDAgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcZGAgOiBDaGlmZnJlcyAgICAgIChgXERgIDogc2F1ZikgICAgICAgICAgICAgICAgICAgIHwgYD9gIDogMCBvdSB1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXHNgIDogRXNwYWNlcyAgICAgICAgIChgXFNgIDogc2F1ZikgICAgICAgICAgICAgICAgICB8IGB7Mn1gIDogTm9tYnJlIGV4YWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW0EtWl1gIDogTWFqdXNjdWxlcyAgICAgKGBbXkEtWl1gIDogc2F1ZikgICAgICAgICAgICB8IGB7LDR9YCA6IEVudHJlIDAgZXQgNCBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthLXpdYCA6IE1pbnVzY3VsZXMgICAgICAoYFteYS16XWAgOiBzYXVmKSAgICAgICAgICAgfCBgezQsfWAgOiA0IG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthYmQ7XWAgOiBsZXMgbGV0dHJlcyBhLCBiLCBjLCBkIGV0IGxlIDsgICAgICAgICAgICAgfCBgezE7M31gIDogMSBPVSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYWJjZGAgOiB1bmUgb3UgcGx1c2lldXJzIGxldHRyZXMgZXhhY3RlcyAgICAgICAgICAgICB8IGB7MSwzfWAgOiBFbnRyZSAxIGV0IDMgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB8YCA6IE91ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBeYCA6IETDqWJ1dCBkJ3VuZSBsaWduZSAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGAoKWAgOiBHcm91cGVyIHVuIGNvbnRlbnUgZXQgbGUgZ2FyZGVyIGVuIG3DqW1vaXJlICAgICAgfCBgJGAgOiBGaW4gZCd1bmUgbGlnbmUgb3UgcmFwcGVsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJyZW5jZSBlc3QgZGUgMSAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KIyMjIyMgUGFyIGV4ZW1wbGUsIGplIGNoZXJjaGUgdW4gY29udGVudSBjb3JyZXNwb25kYW50IGF1IG1vdGlmOiAgDQoNCmBeXGR7NH0gK1tBLVpdXC5gICAgIA0KICAgDQotIGTDqWJ1dGUgcGFyIDQgY2hpZmZyZXMgICANCi0gc3VpdmkgZCd1biBlc3BhY2Ugb3UgcGx1cyAgIA0KLSBzdWl2aSBkJ3VuZSBsZXR0cmUgbWFqdXNjdWxlIGF2ZWMgdW4gcG9pbnQgICANCg0KPC9icj4NCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQoNCiMjIyBFeGVyY2ljZTogTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCjwvYnI+DQoqKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyOiAqKg0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KPC9icj4NCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgMTEuIFRyYW5zcG9zaXRpb24NCg0KIyMgRXhlcmNpY2U6IHRyYW5zcG9zZXIgdW4gdGFibGVhdSBkJ2luZGljYXRldXJzIGR1IFdESQ0KPC9icj4NCg0KKipGaWNoaWVyIG9yaWdpbmFsIHTDqWzDqWNoYXJnw6kgZGUgbGEgW0JhbnF1ZSBtb25kaWFsZV0oaHR0cHM6Ly9kYXRhYmFuay5iYW5xdWVtb25kaWFsZS5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT13b3JsZC1kZXZlbG9wbWVudC1pbmRpY2F0b3JzKSBlbiBmb3JtYXQgLmNzdiBjb21wb3PDqSBkZSA1IHBheXMgZXQgNCBpbmRpY2F0ZXVycyDDoCBsJ2hvcml6b250YWxlIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCi0gUG91ciBvdXZyaXIgbGUgZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIGVtcGxhY2VtZW50IHN1ciBHaXRodWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9DUkxOUC9vcGVucmVmaW5lIA0KICAtIENsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgKldESV9EYXRhX0V4dHJhY3QuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbi4NCiAgDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTEuanBnKQ0KDQo8L2JyPg0KDQoqKjEuIFRyYW5zcG9zZXIgbGVzIGRhdGVzIMOgIGwnaG9yaXpvbnRhbGUgKGZvcm1hdCAqbG9uZyopKiogIA0KDQo8L2JyPg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNwb3NlciAtPiBUcmFuc3Bvc2VyIGxlcyBjZWxsdWxlcyBkZSBwbHVzaWV1cnMgY29sb25uZXMgZW4gbGlnbmVzLi4uKg0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UyLmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTMuanBnKQ0KDQo8L2JyPg0KDQoqKjIuIFJlbXBsaXIgYXV0b21hdGlxdWVtZW50IGxlcyBjZWxsdWxlcyB2aWRlcyBkZXMgZGV1eCBjb2xvbm5lcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gUmVjb3BpZXIgbGVzIHZhbGV1cnMgZGFucyBsZXMgY2VsbHVsZXMgdmlkZXMgY29uc8OpY3V0aXZlcyoNCg0KPC9icj4NCg0KKiozLiBUcmFuc3Bvc2VyIGxlcyBpbmRpY2F0ZXVycyBlbiB2YXJpYWJsZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKlRyYW5zcG9zZXIgLT4gQ29udmVydGlyIGVuIGxpc3RlIGxlcyBjb2xvbm5lcyBkZSBjbMOpL3ZhbGV1ci4uLioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U0LmpwZykNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U1LmpwZykNCg0KPC9icj4NCg0KDQoqKioNCg0KIyAxMi4gRXhwb3J0ZXIgdW4gZmljaGllciBldCBmZXJtZXIgT3BlblJlZmluZQ0KDQotIEZvbmN0aW9uIMOgIHV0aWxpc2VyIGxvcnNxdWUgbCdvbiBlc3QgcHLDqnQgw6AgZXhwb3J0ZXIgc29uIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBwb3VyIHRyYXZhaWxsZXIgZGFucyB1biBhdXRyZSBsb2dpY2llbCAoLmNzdiwgLnhscy4uLikNCi0gT1Igc2F1dmVnYXJkZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIGZpY2hpZXJzIHNvdXMgZm9ybWUgZCdhcmNoaXZlcyBkZSBwcm9qZXQgZGFucyB1biBkb3NzaWVyIHN1ciBsZSBwb3N0ZSBkZSB0cmF2YWlsIGF1eHF1ZWxsZXMgb24gcGV1dCBhY2PDqWRlciBlbiBjbGlxdWFudCBzdXIgYE91dnJpciB1biBwcm9qZXRgIHN1ciBsYSBwYWdlIHByaW5jaXBhbGUuDQotIEwnb3V0aWwgYEV4cG9ydGV1ciB0YWJ1bGFpcmUgcGVyc29ubmFsaXPDqWAgZXN0IHRyw6hzIHV0aWxlIHBvdXIgcGFyYW3DqXRyZXIgbCdleHBvcnRhdGlvbiAoc8OpbGVjdGlvbiBkZSBjb2xvbm5lcywgZm9ybWF0IGRlIGRhdGVzLCBmb3JtYXQgZGUgZmljaGllci4uLikNCi0gRmVybWVyIGwnb25nbGV0IG5lIGZlcm1lIHBhcyBsZSBzZXJ2ZXVyIHF1aSBjb250aW51ZXJhIMOgIHJvdWxlciBlbiBhcnJpw6hyZS1wbGFuLg0KLSBBbGxlciDDoCBsYSBmZW7DqnRyZSBub2lyZSBkdSB0ZXJtaW5hbCBldCB1dGlsaXNlciBsZXMgdG91Y2hlcyBDVFJMICsgQyBqdXNxdSfDoCBjZSBxdSdlbGxlIHNlIGZlcm1lIGQnZWxsZS1tw6ptZSAoaWwgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUgZGUgcsOpcMOpdGVyIMOgIHBsdXMgZCd1bmUgcmVwcmlzZSkuIExlIGZpY2hpZXIgc2VyYSBlbnJlZ2lzdHLDqSB1bmUgZGVybmnDqHJlIGZvaXMgZXQgbGUgbG9naWNpZWwgc2VyYSAgbWFpbnRlbmFudCBiZWwgZXQgYmllbiBmZXJtw6kuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTMuIFBvdXIgZmFpcmUgZHVyZXIgbGUgcGxhaXNpciENCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCmh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJbnZlcnNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIGV0IGludmVyc2VyIGwnb3JkcmUgZGUgcHLDqXNlbnRhdGlvbiBlbiBham91dGFudCB1bmUgdmlyZ3VsZSBlbnRyZSBsZXMgZGV1eCAgDQoNCi0gdmFsdWUuc3BsaXQoJyAnKVsxXSArICIsIiArICIgIiArIHZhbHVlLnNwbGl0KCcgJylbMF0NCg0KT1UNCg0KLSB2YWx1ZS5tYXRjaCgvKC4qKSwoLiopLykucmV2ZXJzZSgpLmpvaW4oIiAiKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQWpvdXRlciB1biB6w6lybyBwb3VyIGF2b2lyIHVuIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBwcsOpY2lzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpBam91dGVyIHVuIHrDqXJvIGRldmFudCBsZSBjb250ZW51IHNpIGRvbm5lIHVuZSBjaGFpbmUgZGUgMCDDoCAyIGNhcmFjdMOocmVzICANCg0KLSAiMCJbMCwyLWxlbmd0aCh2YWx1ZSldICsgdmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBcHBsaXF1ZXIgZGVzIGNvbmRpdGlvbnMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkZvbmN0aW9uIGlmIC0gbcOqbWUgY2hvc2UgcXVlIGRhbnMgZXhjZWwgIA0KDQotIGlmKHRlc3QsIHNpIHRlc3QgZXN0IHZyYWksIHNpIHRlc3QgZXN0IHZyYWkpDQoNClNpIGxhIGNlbGx1bGUgY29udGllbnQgeCwgw6ljcmlyZSB4LCBzaW5vbiB5DQoNCi0gaWYodmFsdWUuY29udGFpbnMoIngiKSwgIngiLCAieSIpDQogDQotIGlmKHZhbHVlLmNvbnRhaW5zKCIxIiksIHZhbHVlLCBudWxsKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcGFyZXIgZGV1eCBjb2xvbm5lcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KSWRlbnRpZmllciBzaSBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIGVzdCBwYXJlaWwgw6AgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSA9PSBjZWxsc1snYXV0cmUtY29sb25uZSddLnZhbHVlDQoNCkVzdC1jZSBxdWUgbGUgcHJlbWllciBjYXJhY3TDqHJlIGRlIGxhIGNvbG9ubmUgeCBlc3QgbGUgbcOqbWUgcXVlIGxhIGNvbG9ubmUgeSAgDQoNCi0gY2VsbHNbImNvbG9ubmUxIl0udmFsdWVbMF0gPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWVbMF0NCg0KQ29tcGFyZXIgbGUgY29udGVudSBkZSBkZXV4IGNvbG9ubmVzIGV0IG1vZGlmaWVyIGxlcyB2YWxldXJzIHNlbG9uIGxlIHLDqXN1bHRhdCBkZSBsYSBjb25kaXRpb24gIA0KDQotIGlmKGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlLCAiUGFyZWlsIiwgIlBhcyBwYXJlaWwiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFbDqXJpZmllciBsZSBmb3JtYXQgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnR5cGUoKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRmFpcmUgZGVzIGNhbGN1bHMgc2ltcGxlcyAodmFsZXVycyBudW3DqXJpcXVlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU29tbWUgZCd1bmUgY29sb25uZSBwbHVzIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyBjZWxsc1snSm91ciBkdSBtb2lzJ10udmFsdWUNCg0KQXJyb25kaXIgbGUgY29udGVudSAgDQoNCi0gcm91bmQodmFsdWUpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZXByZW5kcmUgZXQgY29uY2F0w6luZXIgbGUgY29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZW4gZnVzaW9ubmFudCBsZSBjb250ZW51IGRlIGRldXggYXV0cmVzIGV0IGFqb3V0ZXIgZHUgdGV4dGUgIA0KDQotIGNlbGxzWydub20nXS52YWx1ZSArIGNlbGxzWydub20nXS52YWx1ZSArICJCb25qb3VyISINCg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGF2ZWMgbGVzIHRyb2lzIHByZW1pZXJzIGNhcmFjdMOocmVzIHNldWxlbWVudCAgDQoNCi0gY2VsbHNbJ1N5bXB0b21lJ10udmFsdWVbMCwzXQ0KDQotIFRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCnZhbHVlICsgJyAnICsgY2VsbHNbJ3N0cmVldC10eXBlJ10udmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZW1wbGFjZXIgZGVzIGNhcmFjdMOocmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClJlbXBsYWNlciB0b3V0IGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSAoaWNpLCB2aWRlciBsYSBjb2xvbm5lKSAgDQoNCi0gdmFsdWUucmVwbGFjZSh2YWx1ZSwgIiIpDQoNClJlbXBsYWNlciB1bmUgbGV0dHJlIHBhciB1bmUgYXV0cmUgIA0KDQotIHZhbHVlLnJlcGxhY2VDaGFycygibyIsICJhIikNCg0KRmFpcmUgcGx1c2lldXJzIHJlbXBsYWNlbWVudHMgZCd1biBjb3VwICANCg0KLSB2YWx1ZS5yZXBsYWNlKCIxIiwgInVuIikucmVwbGFjZSgiMiIsICJkZXV4IikucmVwbGFjZSgiMyIsICJ0cm9pcyIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSWRlbnRpZmllciBkZXMgY2VsbHVsZXMgcXVpIGNvbW1lbmNlbnQgcGFyLi4uIChyw6lzdWx0YXQgYm9vbMOpZW4pDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUuc3RhcnRzV2l0aCgiQmVycmkiKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTdXBwcmltZXIgdW4gY2FyYWN0w6hyZSBkZSBkw6lidXQgb3UgZmluIGRlIHZhbGV1cjoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICAqKg0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KKipTdXBwcmltZSAiLiIgw6AgbGEgZmluIGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmF2YWlsbGVyIGF2ZWMgdW4gZm9ybWF0IGRhdGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkV4dHJhaXJlIHNldWxlbWVudCB1bmUgcGFydGllIGQndW5lIGRhdGUgIA0KDQotIHZhbHVlLnRvRGF0ZSgpLmRhdGVQYXJ0KCJ5ZWFyIikgIA0KDQotICBkaWZmKG5vdygpLHZhbHVlLCd3ZWVrcycpICANCg0KPC9kaXY+DQoNCg0KKioqDQoNCg0KIyAxNC4gUmVzc291cmNlcw0KDQotIFtTaXRlIGV0IGRvY3VtZW50YXRpb24gb2ZmaWNpZWxzXShodHRwczovL29wZW5yZWZpbmUub3JnLykNCg0KLSBKb2huIExpdHRsZSwgMjAxOCwgW0NsZWFuaW5nIERhdGEgd2l0aCBPcGVuUmVmaW5lXShodHRwczovL2xpYmpvaG4uZ2l0aHViLmlvL29wZW5yZWZpbmUvaW5kZXguaHRtbCkgIA0KDQotIEV2YW4gV2lsbCwgMjAyMSwgW0dldCBTdGFydGVkIHdpdGggT3BlblJlZmluZTogRXhwbG9yZSwgQ2xlYW4sIGFuZCBUcmFuc2Zvcm0geW91ciBEYXRhIV0oaHR0cHM6Ly9ldmFud2lsbC5naXRodWIuaW8vb3BlbnJlZmluZS1iLykgIA0KDQotIFVDTEEsIDIwMTksIFtHZXR0aW5nIHN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lIERpZ2l0YWwgSHVtYW5pdGllcyAyMDFdKGh0dHA6Ly9taXJpYW1wb3NuZXIuY29tL2NsYXNzZXMvZGgyMDF3MTkvdHV0b3JpYWxzLWd1aWRlcy9kYXRhLWNsZWFuaW5nLWFuZC1tYW5pcHVsYXRpb24vZ2V0dGluZy1zdGFydGVkLXdpdGgtb3BlbnJlZmluZS8pDQoNCi0gW1JlZmluZVBybyBLbm93bGVkZ2UgQmFzZSBmb3IgT3BlblJlZmluZV0oaHR0cHM6Ly9rYi5yZWZpbmVwcm8uY29tLykNCg0KLSBTZXRoIHZhbiBIb29sYW5kLCBSdWJlbiBWZXJib3JnaCwgYW5kIE1heCBEZSBXaWxkZSwgW0NsZWFuaW5nIERhdGEgd2l0aCBPcGVuUmVmaW5lXShodHRwczovL3Byb2dyYW1taW5naGlzdG9yaWFuLm9yZy9lbi9sZXNzb25zL2NsZWFuaW5nLWRhdGEtd2l0aC1vcGVucmVmaW5lKQ0KDQotIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cHM6Ly9kb2FuYS5naXRib29rcy5pby90ZXN0L2NvbnRlbnQvKQ0KDQotIERhdGEgQ2FycGVudHJ5LCBbRGF0YSBDbGVhbmluZyB3aXRoIE9wZW5SZWZpbmUgZm9yIEVjb2xvZ2lzdHNdKGh0dHBzOi8vZGF0YWNhcnBlbnRyeS5vcmcvT3BlblJlZmluZS1lY29sb2d5LWxlc3Nvbi8wMC1nZXR0aW5nLXN0YXJ0ZWQvaW5kZXguaHRtbCkNCg0KLSBPd2VuIFN0ZXBoZW5zLCAyMDE0LCBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHA6Ly93d3cubWVhbmJveWZyaWVuZC5jb20vb3ZlcmR1ZV9pZGVhcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8xMS9JbnRyb2R1Y3Rpb24tdG8tT3BlblJlZmluZS1oYW5kb3V0LUNDLUJZLnBkZikNCg0KLSBWZXJib3JnaCBldCBEZSBXaWxkZSwgMjAxMywgW1VzaW5nIE9wZW5SZWZpbmVdKGh0dHBzOi8vd3d3LmdiaWYuZXMvd3AtY29udGVudC91cGxvYWRzLzIwMTgvMDEvVXNpbmctT3BlblJlZmluZUJvb2sucGRmKQ0KDQotIFtMaWJyYXJ5IENhcnBlbnRyeTogT3BlblJlZmluZV0oaHR0cHM6Ly9saWJyYXJ5Y2FycGVudHJ5Lm9yZy9sYy1vcGVuLXJlZmluZS8wMS1pbnRyb2R1Y3Rpb24vaW5kZXguaHRtbCkNCg0KLSBbR3JhdGVmdWwgRGF0YV0oaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0eXRoZXJlZC9ncmF0ZWZ1bGRhdGEvd2lraSkgIA0KDQotIFtHUkVMIFJlY2lwZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNpcGVzKQ0KDQotIFtDaGVhdCBTaGVldDogUmVndWxhciBFeHByZXNzaW9ucyAmIEdSRUxdKGh0dHBzOi8vY29kZTRsaWJ0b3JvbnRvLmdpdGh1Yi5pby8yMDE4LTEwLTEyLWFjY2Vzcy9Hb29nbGVSZWZpbmVDaGVhdFNoZWV0cy5wZGYpDQoNCi0gW0V0YyFdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9FeHRlcm5hbC1SZXNvdXJjZXMpDQoNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==